package com.example.anew.journey.mynewjourney.base;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.anew.journey.mynewjourney.R;
import com.example.anew.journey.mynewjourney.utils.AntiShake;
import com.example.anew.journey.mynewjourney.utils.Utils;
import com.umeng.analytics.MobclickAgent;


/**
 * 杭州惟君医疗科技有限公司16
 * Created by 20433 on 2018/2/26
 */

public  abstract class BeseActivity extends AppCompatActivity {
    private static final String TAG = "BeseActivity";
    ImageView toolbarDefaultIvReturn,toolbarDefaultIvShared;
    TextView toolbarDefaultTvTitles;
    Button toolbarDefaultBtRelease;
    Toolbar toolbar;
    FrameLayout baseFlayout;
    public AntiShake util;
    private View view;




    // TODO 初始化工作 初始化布局，控件，变量
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        findView();
        //ButterKnife.bind(this);

        //
        Utils.setStatusBar(this, false, false);
        Utils.setStatusTextColor(false, this);
        view =  setMainContentView();
        baseFlayout.addView(view);
        // 防抖动工具类
        util = new AntiShake();


        initView(view);


    }

    private  void findView(){
          toolbarDefaultIvReturn = (ImageView) findViewById(R.id.toolbar_default_iv_return);
        toolbarDefaultTvTitles = (TextView) findViewById(R.id.toolbar_default_tv_titles);
        toolbarDefaultBtRelease = (Button) findViewById(R.id.toolbar_default_bt_release);
        toolbarDefaultIvShared = (ImageView) findViewById(R.id.toolbar_default_iv_shared);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("");
        baseFlayout = (FrameLayout) findViewById(R.id.base_flayout);

        toolbarDefaultIvReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               // if (util.check()) return;
                onClickReturn();
            }
        });
        toolbarDefaultBtRelease.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //if (util.check()) return;
                onClickRelease();
            }
        });
        toolbarDefaultIvShared.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //if (util.check()) return;
                onClickShared();
            }
        });
    }



    // TODO 界面可见  初始化工作方这里也行
    @Override
    protected void onStart() {
        super.onStart();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(connectionReceiver, intentFilter);
        refreshVariable();
    }

    // TODO 获取焦点
    @Override
    protected void onResume() {
        super.onResume();
        MobclickAgent.onResume(this);

    }

    // TODO 失去焦点  可以进行一些轻量级的存储数据和去初始化工作
    @Override
    protected void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);
        DataStored();
    }

    // TODO 界面不可见 做资源回收工作
    @Override
    protected void onStop() {
        super.onStop();
        if (connectionReceiver != null) {
            unregisterReceiver(connectionReceiver);
        }
        solutionRegister();
    }

    // TODO 重新开始 Activity 可见 这里一般不做什么操作
    @Override
    protected void onRestart() {
        super.onRestart();
    }

    // TODO 界面不可见 Activity 销毁 这个方法用来释放资源以及回收工作
    @Override
    protected void onDestroy() {
        super.onDestroy();
        releaseResources();
    }
    private BroadcastReceiver connectionReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
            NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
                // todo 弹出提示框提示用户没有网络了 unconnect network
                promptNoInternet();
            } else {
                // todo 提示用户有网络了  connect network
                promptHaveInternet();
            }
        }
    };


    /**
     * @desc 隐藏返回按钮
     * */
    protected void hiddenReturn(){
       toolbarDefaultIvReturn.setVisibility(View.GONE);

    }
    /**
     * @desc 设置返回按钮图片的资源
     * */
    protected void setReturnPicture(int resId){
        toolbarDefaultIvReturn.setImageResource(resId);
    }
    /**
     * @desc 显示返回按钮
     * */
    protected void displayReturn(){
        toolbarDefaultIvReturn.setVisibility(View.VISIBLE);
    }
    /**
     * @desc 设置toolbar 的背景颜色
     * color toolbar 的背景颜色
     * */
    protected void setToolbarBg(int color){
        toolbar.setBackgroundColor(color);
    }
    /**
     * @desc 隐藏Toolbar
     * */
    protected  void  displayToolbar(){
        toolbar.setVisibility(View.GONE);
    }
    /**
     * @desc 隐藏发布按钮
     * */
    protected void hiddenBtRelease(){
        toolbarDefaultBtRelease.setVisibility(View.GONE);
        toolbarDefaultIvShared.setVisibility(View.VISIBLE);
    }
    /**
     * @desc 显示发布按钮
     * */
    protected void displayBtRelease(){
        toolbarDefaultBtRelease.setVisibility(View.VISIBLE);
        toolbarDefaultIvShared.setVisibility(View.GONE);
    }

    /**
     * @desc 设置发布按钮的文本和字体大小和背景颜色
     * text 发布按钮的文本
     * size 发布按钮的字体大小
     * color 发布按钮的背景颜色
     * */
    protected void setBtRelease(String text,int size,int color){
        toolbarDefaultBtRelease.setText(text);
        toolbarDefaultBtRelease.setTextSize(size);
        toolbarDefaultBtRelease.setTextColor(color);
    }
    protected void setBtReleaseBg(int color){
        toolbarDefaultBtRelease.setBackgroundColor(color);
    }
    /**
     * @desc 显示分享按钮
     * */
    protected void displayIvShared(){
        toolbarDefaultBtRelease.setVisibility(View.GONE);
        toolbarDefaultIvShared.setVisibility(View.VISIBLE);
    }
    /**
     * @desc 隐藏分享按钮
     * */
    protected void hiddenIvShared(){
        toolbarDefaultBtRelease.setVisibility(View.GONE);
        toolbarDefaultIvShared.setVisibility(View.VISIBLE);
    }
    /**
     * @desc 设置分享按钮的图片资源
     * resId 分享按钮的图片资源
     * */
    protected void setIvShared(int resId){
        toolbarDefaultIvShared.setImageResource(resId);
    }
    /**
     * @desc 设置titils的内容和大小
     * text titils的内容
     * size titils的大小
     * */
    protected void setTvTitles(String text,int size){
        toolbarDefaultTvTitles.setText(text);
        toolbarDefaultTvTitles.setTextSize(size);
    }
    /**
     * @desc 设置titils的字体颜色
     * color titils的字体颜色
     */
    public void setTvTitlesColor(int color){
        toolbarDefaultTvTitles.setTextColor(color);
    }
    /**
     * @desc 点击分享按钮
     * */
    protected abstract void onClickShared();

    /**
     * @desc 点击发布按钮
     * */
    protected abstract void onClickRelease();

    /**
     * @desc 点击返回按钮
     * */
    protected abstract void onClickReturn();

    /**
     * @desc 网络监听 用于提示用户有网络了
     */
    protected abstract void promptHaveInternet();

    /**
     * @desc 网络监听 用于提示用户没有网络了
     */
    protected abstract void promptNoInternet();
    /**
     * @desc 初始化数据 onCreate()
     * */
    protected abstract void initView(View view);

    /**
     * @desc 界面可见  刷新变量  注册
     */
    protected abstract void refreshVariable();

    /**
     * @desc 界面可见  失去焦点  存储数据
     */
    protected abstract void DataStored();

    /**
     * @desc 界面不可见 解注册 资源回收
     */
    protected abstract void solutionRegister();

    /**
     * @desc Activity 销毁 释放资源
     */
    protected abstract void releaseResources();
    /**
     * @desc 主要内容的布局资源填充进来
     * */
    protected abstract View setMainContentView();


}

